package hbt.dao;

import hbt.HibernateUtil;

import java.util.List;

import model.Marca;
import model.Usuario;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import beans.BeanUsuario;

public class HibernateUsuarioDAO {
	private static HibernateUsuarioDAO instancia = null;
	private static SessionFactory sf = null;
	
	public static HibernateUsuarioDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateUsuarioDAO();
		} 
		return instancia;
	}

	public List<Marca> levantarMarcas() {
		Session session = sf.openSession();
		Query query = session.createQuery("from Marca");
		List<Marca> marcas = query.list();
		return marcas;
	}
	
	public Usuario loguear(BeanUsuario beanUsuario){
		Session session = sf.openSession();
		Query query = session.createQuery("from Usuario u INNER JOIN FETCH u.perfil perf LEFT JOIN FETCH u.oficinaVenta oficina WHERE u.username = :username and u.password = :password");
		query.setParameter("username", beanUsuario.getUsername());
		query.setParameter("password", beanUsuario.getPassword());
		List<Usuario> usuarios = query.list();
		if(!usuarios.isEmpty())
			return usuarios.get(0);
		else
			return null;
		
	}

	public Usuario crearUsuario(Usuario usuario) {
		Session session = sf.openSession();
		session.beginTransaction();
		session.persist(usuario);
		session.getTransaction().commit();
		session.close();		
		return usuario;
	}
	
}
